9889. Произведение
разностей
Задан массив целых чисел a1, a2,
..., an. Вычислите произведение
Если Вы не знакомы с краткой
формой записи, то указанное произведение равно
|a1 − a2| * |a1 − a3| * ... * |a1 − an| *
|a2 − a3| * |a2 − a4| * ... * |a2 − an| * ... * |an-1 − an|
Другими словами, это произведение
|ai − aj| для всех 1 ≤ i < j ≤ n.
Так как результат будет большим,
вычислите его по модулю m.
Вход. Первая строка содержит два целых
числа n (n ≤ 105) и m
(m ≤ 1000). Следующая строка содержит n целых чисел a1, a2,
..., an (0 ≤ ai ≤ 109).
Выход. Выведите значение произведения по
модулю m.
Пример
входа |
Пример
выхода |
5 123 4 6 12 41 71 |
102 |
циклы
Если
n > m, то обязательно найдутся такие ai и aj что |ai – aj| mod m = 0. Следовательно при n > m указанное произведение равно 0.
При n ≤ m вычисляем произведение при помощи двойного цикла.
Реализация алгоритма
Входную последовательность храним в массиве а.
long long a[200000];
Читаем входные данные.
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++)
scanf("%lld", &a[i]);
В переменной res вычисляем ответ.
res = 1;
При
n > m искомое произведение равно 0.
if (n > m) res = 0;
else
{
Иначе
вычисляем произведение при помощи двойного цикла.
for (i = 0; i < n; i++)
for (j = i + 1; j < n;
j++)
res = (res * abs(a[j] - a[i])) %
m;
}
Выводим ответ.
printf("%lld\n", res);